import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
/**
 * La classe Trajet fait parti du mini-projet "reservation".
 * Elle permet de créer des trajets caractérisés par une ville de départ,
 * une ville d'arrivée et des horaires.
 * 
 * @author Maugard Matthieu & Paeta Suzy
 * @version V 1.0.0
 */

public class Trajet implements Serializable{

	private Villes villeDepart;
	private Villes villeArrivee;
	private Date dateDebut;
	private Date dateFin;
	private int capaciteCourante;
	private ArrayList<Passager> clients;

	/**
	 * Constructeur
	 * @param villeDepart
	 * @param villeArrivee
	 * @param dateDebut
	 * @param dateFin
	 */
	Trajet(Villes villeDepart, Villes villeArrivee, Date dateDebut, Date dateFin){
		if(villeDepart==null) throw new NullPointerException("Le villeDepart est null");
		if(villeArrivee==null) throw new NullPointerException("Le villeArrivee est null");
		if(dateDebut==null) throw new NullPointerException("Le dateDebut est null");
		if(dateFin==null) throw new NullPointerException("Le dateFin est null");
		this.villeDepart=villeDepart;
		this.villeArrivee=villeArrivee;
		this.dateDebut=dateDebut;
		this.dateFin=dateFin;
		this.capaciteCourante=0;
		this.clients = new ArrayList<Passager>();
	}

	/**
	 * @return the villeDepart
	 */
	public Villes getVilleDepart() {
		return villeDepart;
	}

	/**
	 * @return the villeArrivee
	 */
	public Villes getVilleArrivee() {
		return villeArrivee;
	}

	/**
	 * @return the dateDebut
	 */
	public Date getDateDebut() {
		return dateDebut;
	}

	/**
	 * @return the dateFin
	 */
	public Date getDateFin() {
		return dateFin;
	}

	/**
	 * @return the capaciteCourante
	 */
	public int getCapaciteCourante() {
		return capaciteCourante;
	}

	/**
	 * @param capaciteCourante the capaciteCourante to set
	 */
	public void setCapaciteCourante(int capaciteCourante) {
		if(capaciteCourante<0) throw new IllegalArgumentException("La capacité ne peut pas être négative");
		this.capaciteCourante = capaciteCourante;
	}
	
	public String toString() {
		
		String resu = "Capacité courante " + capaciteCourante + ", dateDebut=" + dateDebut + ", dateFin=" + dateFin
		+ ", villeArrivee=" + villeArrivee + ", villeDepart="
		+ villeDepart + "\n";
		for(int i=0; i<clients.size(); i++){
			resu += "\t\t" + clients.get(i).toString();
		}
		resu += "\n";
		
		return resu;
	}

	/**
	 * Incrementer la capacité courante de 1
	 */
	public void incrementeCapaciteCourante(){	
		int newCapacite = getCapaciteCourante() +1;
		setCapaciteCourante(newCapacite);
	}	
	
	
	public ArrayList<Passager> getPassagers() {
		return clients;
	}

	public void setPassagers(ArrayList<Passager> clients) {
		if(clients==null) throw new NullPointerException("La liste des trajets est null");
		this.clients = clients;
	}
}
